package org.example.classtopia.Mapper;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.example.classtopia.Model.Entity.Resource;
import org.example.classtopia.Model.dto.ResourcePageQueryDTO;
import org.example.classtopia.Model.dto.UserResourcePageQueryDTO;
import org.example.classtopia.Model.vo.ResourceDetailVO;
import org.example.classtopia.Model.vo.ResourceListVO;

import java.util.List;

@Mapper
public interface ResourceMapper {
    int insertResource(Resource resource);

    Resource selectResourceById(Long id);

    int incrementDownloadCount(Long id);

    int incrementLikeCount(Long id); // 新增：点赞数+1

    int decrementLikeCount(Long id); // 新增：点赞数-1

    int updateResourceStatus(Long resourceId, Integer status); // 新增：修改资源状态

    // 分页查询资源列表
    List<ResourceListVO> selectResourcePage(ResourcePageQueryDTO queryDTO);

    Long countResourcePage(ResourcePageQueryDTO queryDTO);

    // 根据用户分页查询资源列表
    List<ResourceListVO> selectResourcePageByUser(UserResourcePageQueryDTO queryDTO);

    Long countResourcePageByUser(UserResourcePageQueryDTO queryDTO);

    // 根据关键字查询资源
    List<Resource> selectResourceByKeyword(String keyword);

    Long selectUserIdByResourceId(Long ResourceId);

    List<ResourceDetailVO> getResourceDetailsFlexible(@Param("categoryId") Long categoryId,
                                                    @Param("fileType") String fileType,
                                                    @Param("state") Integer state,
                                                    @Param("offset") int offset,
                                                    @Param("size") int size);

    long countResourceDetailsFlexible(@Param("categoryId") Long categoryId,
                                      @Param("fileType") String fileType,
                                      @Param("state") Integer state);

    // 资源统计：总数
    long countAllResources();
    // 统计贡献者数量
    long countDistinctContributors();
    // 统计总下载量
    long sumDownloadCount();
}
